# 1.引入中间件基类
from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin


# 2.自定义中间件内容（对请求-响应过程中的5个方法进行重写）
class AutoMiddleware(MiddlewareMixin):
    # 2.1请求前触发，request对象生成后，url匹配之前触发，返回None或HttpResponse对象
    def process_request(self, request):
        return None

    # 2.2视图响应之前，返回None或HttpResponse对象
    def process_view(self, request, view_func, view_args, view_kwargs):
        return None

    # 2.4 在视图函数中出现了异常会触发，返回None或HttpResponse对象
    def process_exception(self, request, exception):
        print('process_exception:', exception)
        return HttpResponse("<h1>服务器迷路了，请稍后再试！</h1>")

    # 2.5 响应后触发，返回None或HttpResponse对象
    def process_response(self, request, response):
        # 自定义返回数据格式
        # 只处理API请求（根据URL或Content-Type判断）
        if hasattr(response, 'data'):
            # 创建新的统一格式
            formatted_data = {
                'status': response.status_code,
                'message': 'success' if 200 <= response.status_code < 300 else 'fail',
                'data': response.data
            }
            # 更新响应数据
            response.data = formatted_data
            # 确保Content-Length更新
            response._is_rendered = False
            response.render()
            return response
        return response


